package com.wry.wry_test.utils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;

public class JSONUtil {

    public static void main(String[] args) {
        JSONUtil util = new JSONUtil();
        String json = """
                {
                  "openapi" : "3.0.3",
                  "info" : {
                    "title" : "API",
                    "description" : "iServer 服务资源",
                    "version" : "1.0.1"
                  },
                  "servers" : [ {
                    "url" : "https://iserver.supermap.io/iserver"
                  } ],
                  "tags" : [ {
                    "name" : "服务资源根目录",
                    "description" : "SuperMap iServer 服务列表资源，也是访问服务 REST API 的入口。"
                  } ],
                  "paths" : {
                    "/services" : {
                      "get" : {
                        "tags" : [ "services" ],
                        "summary" : "services",
                        "operationId" : "getServices",
                        "description" : "服务列表资源，通过访问服务列表资源可以获取当前服务器提供的所有GIS 服务的列表和元信息。其中，services 资源的 CSW 表述是指 SuperMap iServer 支持的 OGC 标准的 CSW 2.0.2 目录服务。\\n\\n支持的表述格式：rjson、json、html、xml、csw。\\n\\n本资源提供 1 个请求示例，URI 为：http://localhost:8090/iserver/services",
                        "parameters" : [ {
                          "name" : "token",
                          "in" : "query",
                          "description" : "根据用户信息获取用于访问受保护服务的 Token",
                          "schema" : {
                            "type" : "string"
                          }
                        }, {
                          "name" : "status",
                          "in" : "query",
                          "description" : "返回指定状态的服务，当前支持的状态有 OK 、Created。Created 表示延迟初始化的服务，OK 表示成功初始化的服务。<br>支持一次返回多种状态的服务，例如需要返回成功初始化的服务和延迟初始化的服务，则需要设置为：status=OK, Created如不设置此参数表示返回所有状态的服务。",
                          "schema" : {
                            "type" : "array",
                            "items" : {
                              "type" : "string"
                            }
                          }
                        } ],
                        "responses" : {
                          "200" : {
                            "content" : {
                              "application/json" : {
                                "schema" : {
                                  "$ref" : "#/definitions/services_Response"
                                }
                              },
                              "example" : {
                                "componentType" : "com.supermap.services.components.impl.AddressMatchImpl",
                                "interfaceType" : "com.supermap.services.rest.JaxrsServletForJersey",
                                "additions" : null,
                                "name" : "addressmatch-test/restjsr",
                                "url" : "http://localhost:8090/iserver/services/addressmatch-test/restjsr",
                                "status" : "Created"
                              }
                            }
                          },
                          "400" : {
                            "description" : "请求参数不合法或没有表达足够的信息。"
                          }
                        }
                      }
                    }
                  }
                }
                """;
        System.out.println(util.jsonWashing(json, "example"));
    }


    public static String jsonWashing(String json, String key) {
        if (StringUtils.isBlank(json)) return "";
        JSONObject jsonObject = JSONObject.parseObject(json);
        washing(jsonObject, key);
        System.out.println(jsonObject.toJSONString());
        JSONObject components = (JSONObject) jsonObject.get("components");
        JSONObject schemas = (JSONObject) components.get("schemas");

        JSONObject definitions = (JSONObject) jsonObject.get("definitions");
        schemas.putAll(definitions);
        jsonObject.remove("definitions");





        return jsonObject.toJSONString();

    }

    private static void washing(Object obj, String key) {
        if (obj instanceof JSONObject jsonObject) {
            // 删除当前JSONObject中的key
            jsonObject.remove(key);
            // 遍历JSONObject的每一个entry，进行递归调用
            for (Object value : jsonObject.values()) {
                washing(value, key);
            }
        } else if (obj instanceof JSONArray jsonArray) {
            // 遍历JSONArray中的每个元素，进行递归调用
            for (Object o : jsonArray) {
                washing(o, key);
            }
        }
    }
}
